#'###########################################
#'                                          #
#'  ------------------------------------    #
#'  |     COIN     __                  |    #
#'  |            >(' )                 |    #
#'  |              )/                  |    #
#'  |             /  `----/            |    #
#'  |             \  ~=- /             |    #
#'  |   ~^~^~^~^~^~^~^~^~^~^~^~^~^~^   |    #
#'  ------------------------------------    #
#'                                          #
#'###########################################

rm(list=ls())

#'#
#'# Chemins de travail
#'#
R_ROOT <- "C:/UQAR/Recherche/Maitrise/Donnees"
R_WORKING_DIRECTORY <- file.path(R_ROOT, "R")
R_DATA_PATH <- file.path(R_ROOT, "Donnees")
R_RESULTS_PATH <- file.path(R_ROOT, "Resultats")


source(file.path(R_WORKING_DIRECTORY, "Utils/loadDependencies.R"))


#'#################################################################################################
#'#                                                                                              ##
#'#                                 Recuperation des donnees                                     ##
#'#                                                                                              ##
#'#################################################################################################


#'#
#'# Donnees statiques
#'#

WORKING_DIR <- "C:/UQAR/Recherche/Maitrise/Donnees/Donnees/Bylot/Fixe"

visibilities <- getStaticVisibilities(WORKING_DIR)
#static.data <- extractStaticData(visibilities, write=TRUE, argoscolumns=c("Jour", "Platform.ID.", "Platform", "Prg.No.", "Latitude", "Longitude", "Loc..quality", "Loc..date", "Sat.", "Pass", "Altitude", "Frequency", "Msg.Date", "Comp.", "Long..1", "Lat..sol..1", "Long..2", "Lat..sol..2", "Loc..idx", "Nopc", "Msg", "X.gt....120.DB", "Best.level", "Delta.freq.", "SENSOR..01", "SENSOR..02", "SENSOR..03", "Error.radius", "Semi.major.axis", "Semi.minor.axis", "Ellipse.orientation", "GDOP", "Speed", "Heading", "Alarm", "Format.name", "Heure", "ID"))
static.data <- extractStaticData(visibilities)
static.error <- lapply(static.data, getError)

static.errors <- rbindlist(lapply(static.error, function(x) {return(x@data)}))
setkey(static.errors, visibility, LC)

locsclasses <- c(3, 2, 1, 0, "A", "B")
static.errors.filtered <- static.errors[LC %in% locsclasses]
static.errors.filtered[, LC := factor(LC, levels=locsclasses)]
setkey(static.errors.filtered, LC)

#'#
#'# Donnees mobiles
#'#

WORKING_DIR <- "C:/UQAR/Recherche/Maitrise/Donnees/Donnees/Bylot/Mobile"

mobile.sessions <- getMobileSessions(WORKING_DIR)
mobile.data <- extractMobileData(mobile.sessions, write=TRUE)
mobile.error <- lapply(mobile.data, getError)

mobile.errors <- do.call(rbind, mobile.error)
mobile.errors <- mobile.errors[!is.na(longitude)]

locsclasses <- c(3, 2, 1, 0, "A", "B")
mobile.errors.filtered <- mobile.errors[LC %in% locsclasses]
mobile.errors.filtered[, LC := factor(LC, levels=locsclasses)]
setkey(mobile.errors.filtered, LC)


#'#
#'# Donnees compilees
#'# 

all.errors.filtered <- rbindlist(list(static.errors.filtered[, list(LC, id, distance, diffLong, diffLat, type="static")],
				mobile.errors.filtered[, list(LC, id, distance, diffLong, diffLat, type="mobile")]))
all.errors.filtered[, type := factor(type, levels=c("static", "mobile"))]
all.errors.filtered[, id := as.factor(id)]

#'#################################################################################################
#'#                                                                                              ##
#'#                          Comparaison des donnees statiques et mobiles                        ##
#'#                                                                                              ##
#'#################################################################################################


#'#
#'# Donnees statiques
#'#


#' Erreurs totales
static.error.global <- disp.boot(static.errors.filtered, stat.quantile,
		var=distance,
		quantileBy=quote(list(id, LC)),
		q=68,
		statBy=quote(list(LC)),
		key=c("LC"))
#' Erreur en longitude
static.error.long <- disp.boot(static.errors.filtered, stat.quantile,
		var=diffLong,
		quantileBy=quote(list(id, LC)),
		q=68,
		statBy=quote(list(LC)),
		key=c("LC"))
#' Erreur en latitude
static.error.lat <- disp.boot(static.errors.filtered, stat.quantile,
		var=diffLat,
		quantileBy=quote(list(id, LC)),
		q=68,
		statBy=quote(list(LC)),
		key=c("LC"))


#'#
#'# Donnees mobiles
#'#


#' Erreurs totales
mobile.error.global <- disp.boot(mobile.errors.filtered, stat.quantile,
		var=distance,
		quantileBy=quote(list(id, LC)),
		q=68,
		statBy=quote(list(LC)),
		key=c("LC"))
#' Erreur en longitude
mobile.error.long <- disp.boot(mobile.errors.filtered, stat.quantile,
		var=diffLong,
		quantileBy=quote(list(id, LC)),
		q=68,
		statBy=quote(list(LC)),
		key=c("LC"))
#' Erreur en latitude
mobile.error.lat <- disp.boot(mobile.errors.filtered, stat.quantile,
		var=diffLat,
		quantileBy=quote(list(id, LC)),
		q=68,
		statBy=quote(list(LC)),
		key=c("LC"))


#'#
#'# Comparaison statique et mobile
#'# 


#' Erreurs totales
all.error.global <- rbindlist(list(static.error.global[, type := "static"],
				mobile.error.global[, type := "mobile"]))
all.error.global[, type := factor(type, levels=c("static", "mobile"))]

#' Erreur en longitude
all.error.long <- rbindlist(list(static.error.long[, type := "static"],
				mobile.error.long[, type := "mobile"]))
all.error.global[, type := factor(type, levels=c("static", "mobile"))]

#' Erreur en latitude
all.error.lat <- rbindlist(list(static.error.lat[, type := "static"],
				mobile.error.lat[, type := "mobile"]))
all.error.global[, type := factor(type, levels=c("static", "mobile"))]

#' Erreur en longitude et latitude
all.error.latlong <- rbindlist(list(all.error.lat[, errtype := "latitude"],
				all.error.long[, errtype := "longitude"]))
all.error.latlong[, errtype := factor(errtype, levels=c("longitude", "latitude"))]


#'#################################################################################################
#'#                                                                                              ##
#'#                                 Analyses statistiques                                       ##
#'#                                                                                              ##
#'#################################################################################################


#'#
#'# Comparaison Statique/Mobile
#'# 


lmm <- lmer(log(distance) ~ type * LC + (1|id), data = all.errors.filtered)
summary(lmm)
p <- pvals.fnc(lmm)
plotLMER.fnc(lmm, pred="LC", intr=list("type", c("statique", "mobile"), "beg", 
				list(c("black", "red"), rep(1,2))))
randomEffects <- ranef(lmm, postVar = TRUE)
qqmath(randomEffects)
dotplot(randomEffects)

rsquared.lme(list(lmm))



#'#################################################################################################
#'#                                                                                              ##
#'#                                 Graphiques                                                   ##
#'#                                                                                              ##
#'#################################################################################################


#' Erreurs globales 
colors <- c("palegreen2", "chartreuse4")
png(file = "C:/UQAR/Recherche/Maitrise/Donnees/Resultats/globalError.png", width=700, height=700)
barchart(mean ~ LC, all.error.global, groups=as.factor(type), stack=FALSE,
		ly=all.error.global[,lb],
		uy=all.error.global[, ub], prepanel=prepanel.errorbar, panel=panel.errorbar,
		col=colors, box.ratio=3,
		key=list(text=list(c("Statique", "Mobile")), 
				rectangles=list(col=colors), x=1, y=0.98, corner=c(1, 1)),
		xlab="Classes de localisation",
		ylab="Rayon d'erreur (m \261 IC 95%)",
		main="Rayon d'erreur en fonction de la classe de localisation et du d\u00e9placement",
		scales = list(col=1,tck=c(1,0)),
		)
dev.off()


#' Erreur en longitude et latitude
# colors <- c("lightblue", "lightsteelblue", "darkblue")
barchart(mean ~ LC | errtype, all.error.latlong, groups=as.factor(type), stack=FALSE,
		ly=all.error.latlong[,lb],
		uy=all.error.latlong[, ub], prepanel=prepanel.errorbar, panel=panel.errorbar,
		col=colors, box.ratio=3,
		xlab="Classes de localisation",
		ylab="Rayon d'erreur (\261 IC 95%)")


